package com.study.d2_iterator;

import java.util.ArrayList;
import java.util.Iterator;

public class Test4 {
    public static void main(String[] args) {
        //目标：三种遍历可能出现的并发修改异常问题
        ArrayList<String> list = new ArrayList<>();
        list.add("java");
        list.add("c++");
        list.add("python");
        list.add("rust");
        list.add("go");
        list.add("php");
        //使用迭代器遍历，并用集合删除数据，出现并发修改异常，出bug
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            if(s.contains("a"))
//       出现并发修改异常         list.remove(s);
                iterator.remove();//使用迭代器删除，则不会
        }
        System.out.println(list);
            //使用for增强循环遍历并删除，本质就是迭代器，一定出错，无法解决
/*        for (String s : list) {
            if(s.contains("o"))
                list.remove(s);
        }*/
        //lambda表达式删除，一定出错，无法解决
//        list.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                if(s.contains("o"))
//                    list.remove(s);
//            }
//        });
    }
}
